package com.xlh.dao.course.ext;

import com.xlh.dto.course.ChapterBasicInfoDTO;
import com.xlh.dto.course.ChapterOrderDTO;
import com.xlh.pojo.course.Chapter;
import com.xlh.pojo.course.ChapterBasic;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface ChapterMapperExt {

    /**
     * 根据课程id集合、章节id集合，获取未删除的章节基本信息
     *
     * @param courseIds 课程id集合
     * @param ids       章节id集合
     * @param types     类型集合
     * @return
     */
    List<ChapterBasicInfoDTO> listChapter(@Param("courseIds") List<Long> courseIds, @Param("ids") List<Long> ids,
                                          @Param("types") List<Integer> types);

    /**
     * 根据课程id集合、章节id集合，获取未删除的章节基本信息
     *
     * @param parentIds 父级（章节）id集合
     * @return
     */
    List<ChapterBasicInfoDTO> listTask(@Param("parentIds") List<Long> parentIds, @Param("info") String info);

    /**
     * 批量插入章节基础表
     *
     * @param chapterBasics 章节基础信息
     */
    void insertBatchChapterBasic(List<ChapterBasic> chapterBasics);

    /**
     * 批量插入章节
     *
     * @param list 章节集合
     */
    void insertBatch(List<Chapter> list);

    /**
     * 批量修改章节
     *
     * @param chapters 章节集合
     */
    void updateBatch(@Param("chapters") List<Chapter> chapters);

    int updateUpdateFalg(@Param("ids") List<Long> ids, @Param("falg") Boolean falg);

    int updateUpdateClipboardFalg(@Param("id") Long id, @Param("courseId") Long courseId, @Param("flag") Boolean flag);

    Integer getClipboardFalg(Map map);

    /**
     * 查询指定类型或者步骤类型下的章节信息
     *
     * @param courseId
     * @param stepType
     * @param parent
     * @param types
     * @return
     */
    List<ChapterBasicInfoDTO> listChapterByStepType(@Param("courseId") Long courseId,
                                                    @Param("stepType") Integer stepType,
                                                    @Param("parent") Integer parent,
                                                    @Param("types") List<Integer> types);

    /**
     * 章节ID为同一课程下
     * 对章节ID进行排序
     *         章节ID一
     *              任务ID 一
     *              任务ID 二
     *         章节ID二
     * @param chapterSum
     * @return
     */
    List<ChapterOrderDTO> getOrderListByChaperId(@Param("chapterSum") List<Long> chapterSum);
}